package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.product.RCProductSpecification;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.RCBudgetContract;
import com.shrct.businessprocess.purchase.RCProductAndQuantity;
import com.shrct.businessprocess.purchase.RCProductDeliverItem;
import com.shrct.businessprocess.purchase.impl.RCBudgetContractItemImpl;
import com.shrct.businessprocess.purchase.proxy.RCBudgetContractItemProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;

@EntityImplementation(implementBy = RCBudgetContractItemImpl.class)
public interface RCBudgetContractItem extends IModelObject {
  public abstract RCBudgetContract getContract();
  
  public abstract RCBudgetContractItem setContract(final RCBudgetContract contract);
  
  public abstract String getTitle();
  
  public abstract RCBudgetContractItem setTitle(final String title);
  
  public abstract RCProductSpecification getProductSpec();
  
  public abstract RCBudgetContractItem setProductSpec(final RCProductSpecification productSpec);
  
  public abstract Integer getQuantity();
  
  public abstract RCBudgetContractItem setQuantity(final Integer quantity);
  
  public abstract Boolean getIsIncludeInContract();
  
  public abstract RCBudgetContractItem setIsIncludeInContract(final Boolean isIncludeInContract);
  
  public abstract RCProjectMoney getPrice();
  
  public abstract RCBudgetContractItem setPrice(final RCProjectMoney price);
  
  public abstract String getIdentifier();
  
  public abstract Integer getDeliveredQuantity();
  
  public abstract Collection<RCProductDeliverItem> getDeliveredItems();
  
  /**
   * 如果该商品或者起关联产品已经请购过 则不允许删除
   */
  public abstract Boolean canDelete();
  
  /**
   * 待发货数量
   */
  public abstract Integer getDeliverCandidatesQuantity();
  
  public abstract Iterable<RCProductAndQuantity> getInStockItems();
  
  public abstract Integer getInStockQuantity();
  
  /**
   * 待发货产品清单
   */
  public abstract Iterable<RCProductAndQuantity> getDeliverCandidates();
  
  public abstract RCBudgetContractItemProxy toProxy();
}
